import { EBundleType, EResType, EViewType } from "../Common/Enum";

export interface IMessage {
    recvMsg(cmd: number, data: any): void;
}

/** 弹窗数据接口 */
export interface IViewData {
    type: EViewType;            // 页面类型
    bundle: EBundleType;        // bundle类型
    name: string;               // 脚本名
    zIndex: number;
}

export interface IFlyResData {
    resType: EResType;
    parent: cc.Node;
    from: cc.Node;
    to: cc.Node;
    value: number;
    flyTimes: number;
    maxWidth?: number;
    maxHeight?: number;
}


/** 聊天配置 */
export interface IChatInfo {
    id: number;
    text: string;
}

// 本地储存数据
export interface IGameData {
    lastLoginTime: number;      // 最后一次登录时间戳(00:00:00)
    isPlayMusic: number;        // 是否播放音乐 1.播放 0.关闭
    isPlaySound: number;        // 是否播放音效 1.播放 0.关闭
    isShake: number;            // 是否开启震动 1.开启 0.关闭

    money: number;              // 钞票
    brain: number;              // 脑力

    addPriceCount: number;      // 商人(林瑶)加价次数

    talkData: ITalkData;        // 对话数据
    taskData: ITaskData;        // 任务数据
    // guideData: IGuideData;      // 教学数据
    bagData: IBagItemData[];    // 背包数据
    storeData: IStoreData;      // 小卖店数据
    hospitalData: IHospitalData;// 御康馆数据
    settingData: ISettingData[];// 设置页头像数据
    timeData: ITimeData;        // 时间数据
}

export interface ITimeData {
    day: number;
    hour: number;
    sceond: number;
    timeScale: number;
}

export interface ISettingData {
    id: number;
    isUnlock: number;
    isSelected: number;
}

//-----------------------------------------御康馆--------------------------------
/** 御康馆数据 */
export interface IHospitalData {
    id: number;                 // 当前等级
    cur: number;                // 当前完成人数
    exitTime: number;           // 记录上次退出时间(计算托管时间)
    autoEndTime: number;        // 自动托管结束时间
    /** 拜师? 0.未拜师 1.已拜师 2.拒绝 3.拒绝拜师(已出提示: '在御康馆打杂，成为药馆学徒') */
    student: number;
    groupLv: number;            // 柜台等级

    cellData: IHospitalCellData[];
    tempData: number[];
    guestData: IHospitalGuestData[];
    itemId: number[];
}

export interface IHospitalLevelData {
    total: number;              // 总数
    col: number;                // 每组x个
    ids: number[] | string[];   // 实际id
    counts: number[];           // 每种数量
}

export interface IHospitalCellData {
    gid: number;        // 组id
    id: number;         // 顺序id
    col: number;        // 列
    curDeep: number;    // 当前展示
    mids: number[];     // 材料id(纵向深度)
}

export interface IHospitalTempData {
    tempId: number;     // 位置
    itemId: number;     // 物品id
}

export interface IHospitalGuestData {
    guestId: number;
    itemId: number;
    cur: number;
    max: number;
    isLock: boolean;
    skeId: number;
}
//-----------------------------------------end--------------------------------

export interface IStoreData {
    stockMoney: number;         // 柜台金额
    upItems: IStoreUpItem[];
    downItems: IStoreItem[];
}

export interface IStoreUpItem {
    counterId: number;
    item: IStoreItem;
}

export interface IStoreItem {
    id: number;
    num: number;
}

export interface ITalkData {
    id: number;
}

export interface ITaskData {
    id: number;
    /** 主动展示过? 0.没展示 1.已展示 */
    isAutoShow: number;
}

export interface IGuideData {
    isGuide: boolean;           // 教学?
    step: number;               // 步骤
}

/** 背包数据 */
export interface IBagItemData {
    /** id */
    id: number;
    /** 数量 */
    num: number;
}

/** 选择自定义弹窗数据 */
export interface ISelectData {
    desc: string;
    success?: ISelectItem;
    fail?: ISelectItem;
    callback?: Function;
}

export interface ISelectItem {
    lab?: string;                // 按钮文本
    isVideo?: boolean;          // 视频按钮?
    value?: number;             // 消耗金额
    next?: ISelectData;         // 下个选择弹窗数据
    callback?: Function;        // 完成回调
}

export interface IBaseSkeData {
    ske: sp.Skeleton;
    animName: string;
    skinName?: string;
    slotName?: string;
    attachName?: string;
    isLoop: boolean;
    timeScale?: number;
    loopCount?: number;
    showBones?: string[];
    hideBones?: string[];
    callback?: Function;
}